package com.danjinwulian.iot.service;

import com.tencentcloudapi.iotexplorer.v20190423.models.*;

/**
 * 腾讯云物联网开发平台服务接口
 * 
 * @author ken.h
 */
public interface TencentIotService {

    /**
     * 创建产品
     * 
     * @param productName 产品名称
     * @param productType 产品类型（0：普通产品，1：网关产品）
     * @param encryptionType 加密类型（1：证书认证，2：签名认证）
     * @return CreateStudioProductResponse 创建产品响应
     */
    CreateStudioProductResponse createProduct(String productName, Long productType, String encryptionType);

    /**
     * 修改产品
     * 
     * @param productId 产品ID
     * @param productName 产品名称
     * @return ModifyStudioProductResponse 修改产品响应
     */
    ModifyStudioProductResponse modifyProduct(String productId, String productName);

    /**
     * 删除产品
     * 
     * @param productId 产品ID
     * @return DeleteStudioProductResponse 删除产品响应
     */
    DeleteStudioProductResponse deleteProduct(String productId);

    /**
     * 获取产品详情
     * 
     * @param productId 产品ID
     * @return DescribeStudioProductResponse 产品详情响应
     */
    DescribeStudioProductResponse getProductDetail(String productId);

    /**
     * 获取产品列表
     * 
     * @param offset 偏移量
     * @param limit 限制数量
     * @return GetStudioProductListResponse 产品列表响应
     */
    GetStudioProductListResponse getProductList(Long offset, Long limit);

    /**
     * 创建设备
     * 
     * @param productId 产品ID
     * @param deviceName 设备名称
     * @return CreateDeviceResponse 创建设备响应
     */
    CreateDeviceResponse createDevice(String productId, String deviceName);

    /**
     * 删除设备
     * 
     * @param productId 产品ID
     * @param deviceName 设备名称
     * @return DeleteDeviceResponse 删除设备响应
     */
    DeleteDeviceResponse deleteDevice(String productId, String deviceName);

    /**
     * 获取设备详情
     * 
     * @param productId 产品ID
     * @param deviceName 设备名称
     * @return DescribeDeviceResponse 设备详情响应
     */
    DescribeDeviceResponse getDeviceDetail(String productId, String deviceName);

    /**
     * 获取设备列表
     * 
     * @param productId 产品ID
     * @param offset 偏移量
     * @param limit 限制数量
     * @return GetDeviceListResponse 设备列表响应
     */
    GetDeviceListResponse getDeviceList(String productId, Long offset, Long limit);

    /**
     * 控制设备数据
     * 
     * @param productId 产品ID
     * @param deviceName 设备名称
     * @param data 控制数据
     * @return ControlDeviceDataResponse 控制设备响应
     */
    ControlDeviceDataResponse controlDevice(String productId, String deviceName, String data);

    /**
     * 发布消息
     * 
     * @param productId 产品ID
     * @param deviceName 设备名称
     * @param topic 主题
     * @param payload 消息内容
     * @return PublishMessageResponse 发布消息响应
     */
    PublishMessageResponse publishMessage(String productId, String deviceName, String topic, String payload);
}
